package com.qimo.zuoyeoa.interceptor;


import com.qimo.zuoyeoa.entity.User;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

// 登录拦截器
// 可以拦截每一个请求（类似过滤器）
// 对每一个请求，测试其相应的会话对象中有没有user属性
// 如果有，则放过该请求访问，否则，表明当前用户没有便当，则跳转到登录页面，强制用户登录
public class LoginInerceptor implements HandlerInterceptor {

    // 前置处理
    // 所谓的前置处理，是指请求还没有被路由到控制器处理函数，而被该方法拦截处理
    // 如果这个方法返回值是true，则调用继续，也就是说，可以继续调用直到控制器处理方法
    // 如果这个方法返回值是false，则调用结束，也就是说，不会再调用控制器处理方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        // 从当前请求对象中取出对应得session对象
        // 复习：在服务器内存中查找与request对象所携带的jsesionID对应得session对象
        HttpSession session = request.getSession();

        // 从session中取出user属性对应的用户信息对象
        User user = (User) session.getAttribute("user");

        if(user != null) {
            // 如果user存在，则意味着用户已经登录
            // 如果已经是登录状态，则放行这个请求
            return true;
        }

        // 直接调用HttpServletResponse对象的方法，设置相应为重定向
        response.sendRedirect("/login");

        // 返回false意味着，不会再做任何处理，直接进行返回状态了
        return false;
    }
}
